package top.soulblack.purchasesale.controller.wechat;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.codec.digest.DigestUtils;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import top.soulblack.purchasesale.service.UserService;
import top.soulblack.purchasesale.model.User;

@Controller
@RequestMapping("/OAuth2")
public class OAuth2Controller {

    @Autowired
    private WxMpService wxMpService;

    @GetMapping("/authorize")
    public String authorize(){
        String url = "http://aihongsoft.com/OAuth2/userInfo";
        String redirectURL = wxMpService.oauth2buildAuthorizationUrl(url, WxConsts.OAuth2Scope.SNSAPI_USERINFO, "wechat/index");
//        log.info("【微信网页授权】获取code,redirectURL={}", redirectURL);
        return "redirect:" + redirectURL;
    }

    @GetMapping("/userInfo")
    public String userInfo(@RequestParam("code") String code,
                           @RequestParam("state") String returnUrl) throws Exception {
//        log.info("【微信网页授权】code={}", code);
//        log.info("【微信网页授权】state={}", returnUrl);
        WxMpOAuth2AccessToken wxMpOAuth2AccessToken;
        try {
            wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code);
        } catch (WxErrorException e) {
//            log.info("【微信网页授权】{}", e);
            throw new Exception(e.getError().getErrorMsg());
        }
        String openId = wxMpOAuth2AccessToken.getOpenId();
//        log.info("【微信网页授权】openId={}", openId);
        return "redirect:http://aihongsoft.com/wechat/index";
    }

//        @Autowired
//        private UserService userService;
//
//        /**
//         * 登入界面显示
//         */
//        @RequestMapping(value = {"/", "/login"})
//        public String login() {
//            return "/login/login";
//        }
//
//        /**
//         * 登录
//         * @return
//         */
//        @RequestMapping("/loginClick")
//        @ResponseBody     //添加返回结果
//        public String loginClick(String userName, String password, String verificationCode, HttpServletRequest request)
//                throws DisabledAccountException {
//            String captcha = (String) request.getSession().getAttribute("validateCode");
//                if (captcha.equals(verificationCode)) {
//                    /**
//                     * 获得当前用户对象,状态为“未认证”
//                     */
//                    Subject subject = SecurityUtils.getSubject();
//                    User adminUser = userService.selectByUserName(userName);//用户管理部分
//
//                    AuthenticationToken token = new UsernamePasswordToken(userName,
//                            DigestUtils.md5Hex(password ));// md5加密
//                    try {
//                        subject.login(token);
//                        return Result.success("1");
//                    }
//                    catch (AuthenticationException e) {
//                        return Result.error( "用户名错误");
//                    }
//
//                }
//                else {
//                    //密码错误
//                    return Result.error("密码错误");
//                }
//        }
//
//    /**
//     * 到达注册页面
//     */
//        @RequestMapping("/register")
//        public String register() {
//        return "register";
//    }
//
//    /**
//     * 到达首页
//     */
//        @RequestMapping("/index")
//        public String toindex() {
//        return "index";
//    }
//
//    /**
//     * 后台获得验证码
//     */
//    @RequestMapping("/getcode")
//    @ResponseBody
//    public int getcode(String phone) {
//        long l = System.currentTimeMillis();
//        int k1 = (int) (l % 10000);
//        String code = String.valueOf(k1);
//        //session中保存我后台生成的code,为了将来拿出来与用户提交的进行比较。
//        Subject subject = SecurityUtils.getSubject();
//        Session session = subject.getSession();
//        session.setAttribute("autocode", code);
//        //成功返回0，失败返回1
//        if (phone != null) {
//            //把后台生成的code和所发送的手机号传进发送消息类，调用执行。考虑需不需要
//           // SmsService.send(phone, code);
//            return 0;
//        } else {
//            return 1;
//        }
//    }
//
//    /**
//     * 判断验证码的正确性
//     */
//    @RequestMapping("/comparecode")
//    @ResponseBody
//    public int authorization(String preauthcode) {
//        Subject subject = SecurityUtils.getSubject();
//        Session session = subject.getSession();
//        String autocode = (String) session.getAttribute("autocode");
//        //验证码不为空时，到后台进行比较，返回响应码，为1，提示请先获得验证码
//        //为2，提示验证码错误
//        //为3，验证码正确，无提示
//        if (autocode == null) {
//            return 1;
//        } else if (autocode.equals(preauthcode)) {
//            return 3;
//        } else {
//            return 2;
//        }
//    }
//
//        /**
//         * 退出
//         * @return
//         */
//        @RequestMapping("/quit")
//        @ResponseBody
//        public String quit() {
//            Subject subject = SecurityUtils.getSubject();
//            try {
//                subject.logout();
//                return Result.success("1");
//            } catch (Exception e) {
//                return Result.error("退出失败");
//            }
//        }
//
//    @RequiresPermissions("黑名单管理")
//    @RequestMapping(value = "/heimingdan", method = RequestMethod.GET)
//    public String loginaef() {
//        return "heimingdan";
//    }

}
